/*jslint todo: true */
/*global Service */

/**
 * @class
 * @name Service.Vk.Users.GetInfo.Request
 * @extends Service.Vk.Request
 */
Service.Vk.Users.GetInfo.Request = Service.Vk.Request.$extend({

    /**
     * Конструктор.
     *
     * @public
     * @function
     * @param {Object} options
     * @return {void}
     */
    $init : function (options) {
        'use strict';
        // Регистрируем список идентификаторов пользователей по
        // которым будет запрошена подробная информация.
        // TODO: могут быть ещё никнеймы !
        this.registerAsListIdentifiers('uids', {
            'required'   : true,
            'unsigned'   : true,
            'emptyAllow' : false
        });
        // TODO: поля стоит использовать только из списка допустимых !
        this.registerAsListStrings('fields', {
            'required'   : true,
            'emptyAllow' : false,
            'defaults'   : [
                this.$self.FIELD_UID,
                this.$self.FIELD_FIRSET_NAME,
                this.$self.FIELD_LAST_NAME
            ]
        });
        // Регистрируем параметр падежа имени и
        // фамилии запрошенных пользователей.
        this.registerAsEnum('name_case', {
            'required'  : false,
            'delimiter' : ',',
            'defaults'  : this.$self.CASE_NOM, // именительный
            'list'      : [
                this.$self.CASE_NOM, // именительный
                this.$self.CASE_GEN, // родительный
                this.$self.CASE_DAT, // дательный
                this.$self.CASE_ACC, // винительный
                this.$self.CASE_INS, // творительный
                this.$self.CASE_ABL  // предложный
            ]
        });
        // Вызываем конструктор
        // родительского класса.
        this.$super(options);
    },

    $static : {

        /**
         * @public
         * @function
         * @name Service.Vk.Users.GetInfo#CASE_NOM
         * @type {String}
         */
        CASE_NOM : 'nom',

        /**
         * @public
         * @function
         * @name Service.Vk.Users.GetInfo#CASE_GEN
         * @type {String}
         */
        CASE_GEN : 'gen',

        /**
         * @public
         * @function
         * @name Service.Vk.Users.GetInfo#CASE_DAT
         * @type {String}
         */
        CASE_DAT : 'dat',

        /**
         * @public
         * @function
         * @name Service.Vk.Users.GetInfo#CASE_ACC
         * @type {String}
         */
        CASE_ACC : 'acc',

        /**
         * @public
         * @function
         * @name Service.Vk.Users.GetInfo#CASE_INS
         * @type {String}
         */
        CASE_INS : 'ins',

        /**
         * @public
         * @function
         * @name Service.Vk.Users.GetInfo#CASE_ABL
         * @type {String}
         */
        CASE_ABL : 'abl',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_UID
         * @type {String}
         */
        FIELD_UID : 'uid',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_FIRSET_NAME
         * @type {String}
         */
        FIELD_FIRSET_NAME : 'first_name',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_LAST_NAME
         * @type {String}
         */
        FIELD_LAST_NAME : 'last_name',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_NICKNAME
         * @type {String}
         */
        FIELD_NICKNAME : 'nickname',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_SCREEN_NAME
         * @type {String}
         */
        FIELD_SCREEN_NAME  : 'screen_name',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_SEX
         * @type {String}
         */
        FIELD_SEX : 'sex',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_BIRTHDATE
         * @type {String}
         */
        FIELD_BIRTHDATE : 'bdate',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_CITY
         * @type {String}
         */
        FIELD_CITY : 'city',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_COUNTRY
         * @type {String}
         */
        FIELD_COUNTRY : 'country',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_TIMEZONE
         * @type {String}
         */
        FIELD_TIMEZONE : 'timezone',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_PHOTO
         * @type {String}
         */
        FIELD_PHOTO : 'photo',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_PHOTO_MEDIUM
         * @type {String}
         */
        FIELD_PHOTO_MEDIUM : 'photo_medium',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_PHOTO_BIG
         * @type {String}
         */
        FIELD_PHOTO_BIG : 'photo_big',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_HAS_MOBILE
         * @type {String}
         */
        FIELD_HAS_MOBILE : 'has_mobile',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_RATE
         * @type {String}
         */
        FIELD_RATE : 'rate',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_CONTACTS
         * @type {String}
         */
        FIELD_CONTACTS : 'contacts',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_EDUCATION
         * @type {String}
         */
        FIELD_EDUCATION : 'education',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_ONLINE
         * @type {String}
         */
        FIELD_ONLINE : 'online',

        /**
         * @public
         * @constant
         * @name Service.Vk.Users.GetInfo#FIELD_COUNTERS
         * @type {String}
         */
        FIELD_COUNTERS : 'counters'

    }

});